package ru.niir.goodfil.audit.ui.extractors;

import ru.niir.goodfil.audit.domain.*;
import ru.niir.goodfil.audit.util.Assert;
import ru.niir.goodfil.excel.client.ValueExtractor;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: Кирилл
 */
public class EventTypeExtractor implements ValueExtractor {
    private Map<Class, String> types = new HashMap<Class, String>() {{
        put(ClientC1NumChangeEvent.class, "Изменение кода 1С клиента");
        put(ClientDebtChangeEvent.class, "Изменение долга у клиента");
        put(ClientDeliveryInfoChangeEvent.class, "Изменение информации о доставке у клиента");
        put(ClientPriceColumnChangeEvent.class, "Изменение ценовой колонки у клиента");
        put(ClientUIEvent.class, "Клиенты");
        put(EntityEvent.class, "Операции с сущностями");
        put(EnviromentIntegrityEvent.class, "Целостность окружения");
        put(GoodUIEvent.class, "Товары");
        put(LoginEvent.class, "Безопасность");
        put(OrderUIBuildEvent.class, "Складские операции");
        put(PasswordChangeEvent.class, "Изменение пароля");
        put(ExceptionEvent.class, "Ошибка ИС");
        put(PersonalPriceEvent.class, "Персональные цены");
        put(ReplacementActionEvent.class, "Работа с замещением");
        put(ReplacementUIEvent.class, "Замещения");
        put(SettingModificationEvent.class, "Изменение настроек ИС");
        put(UserUIEvent.class, "Пользователи");
        put(OrderUIEvent.class, "Заказы");
        put(OrderItemUIEvent.class, "Заказы");
    }};

    public Object extract(Object o) {
        Assert.notNull(o);
        Assert.isInstanceOf(o, Event.class);

        String result = types.get(o.getClass());

        if (o instanceof EntityEvent) {
            EntityEvent entityEvent = (EntityEvent) o;
            String className = entityEvent.getKlass();

            if ("ru.niir.goodfil.db.Order".equals(className)) {
                return "Операции с заказом";
            }
            if ("ru.niir.goodfil.db.Client".equals(className)) {
                return "Операции с клиентом";
            }
            if ("ru.niir.goodfil.db.User".equals(className)) {
                return "Операции с пользователем";
            }
            if ("ru.niir.goodfil.db.Replacement".equals(className)) {
                return "Операции с замещением";
            }
            if ("ru.niir.goodfil.db.OrderItem".equals(className)) {
                return "Операции с позициями заказа";
            }
            if ("ru.niir.goodfil.db.PersonalPrice".equals(className)) {
                return "Операции с персональными ценами";
            }
            return "Операция с объектом";
        }

        return result;
    }
}
